package com.zoweunion.mechanic.dao.shangji;

import com.zoweunion.mechanic.model.app.ReportViolations;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 商机mapper
 * @author rentianfeng
 */
@Component
public interface ShangJiMapper {

    /**
     * 获取分类配置类的 功能分类名称
     * @param areaName
     * @return
     */
    Map<String, Object> getProvinceByCityName(@Param("areaName") String areaName);

    /**
     * 获取分类配置类的 功能分类名称
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getTypeConfigure(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 新增分类配置类的 功能分类名称
     * @param reqMap
     * @return
     */
    int insertTypeConfigure(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 查询数据库最近访问城市中有没有这条城市的记录
     * @param reqMap
     * @return
     */
    Map<String, Object> getVisitCityByCity(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 修改最近访问城市
     * @param reqMap
     * @return
     */
    int updateVisitCity(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 查询这个用户下有几个最近访问城市
     * @param reqMap
     * @return
     */
    int getVisitCityCountByUid(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 新增最近访问城市
     * @param reqMap
     * @return
     */
    int insertVisitCity(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 取数据库访问城市最早的一条记录
     * @param reqMap
     * @return
     */
    Map<String, Object> getVisitCityByTime(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取用户最近访问城市
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getRecentVisitCity(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 保存我的发布
     * @param reqMap
     * @return
     */
    int saveMyRelease(Map<String, Object> reqMap);

    /**
     * 获取我的发布
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getMyRelease(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取我的发布 总条数
     * @param reqMap
     * @return
     */
    Integer getMyReleaseCount(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取我的发布
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getMyReleaseNew(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取我的发布 总条数
     * @param reqMap
     * @return
     */
    Integer getMyReleaseNewCount(@Param("reqMap") Map<String, Object> reqMap);

    Map<String, Object> getMyReleaseById(@Param("table_name") String tableName, @Param("id") String id, @Param("reqMap") Map<String, Object> reqMap);

    int deleteMyRelease(@Param("ids") List<String> ids, @Param("u_id") String uId,@Param("r_id") String sId);

    /**
     * 获取我的收藏 id是id的对应表的数据
     * @param ids
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getTableIdMyCollection(@Param("ids") List<String> ids, @Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取我的收藏的全部id
     * @param reqMap
     * @return
     */
    List<String> getMyCollectionId(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 新增我的收藏搜索记录
     * @param reqMap
     * @return
     */
    int addMycollectionSearchRecord(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 根据名称获取搜索记录的个数
     * @param reqMap
     * @return
     */
    int getSearchRecordByName(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取我的收藏搜索记录
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getMycollectionSearchRecord(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 删除用户下所有的我的收藏搜索记录
     * @param reqMap
     * @return
     */
    int delMycollectionSearchRecord(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取热门城市
     * @return
     */
    List<Map<String, Object>> getHotCity();

    /**
     * 我的发布搜索
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> myReleaseSearch(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 删除我的发布
     * @param ids
     * @param reqMap
     * @return
     */
    int updateMyRelease(@Param("ids") List<String> ids, @Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取我的发布的全部id
     * @param reqMap
     * @return
     */
    List<String> getMyReleaseId(@Param("reqMap") Map<String, Object> reqMap);


    /**
     * 查询上次签到数据
     * @param reqMap
     * @return
     */
    Map<String, Object> selectSignIn(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 签到操作
     * @param reqMap
     * @return
     */
    int insertSignIn(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 更新剩余抽奖次数
     * @param reqMap
     * @return
     */
    int updateDrawsCountSignIn(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 逻辑删除签到数据
     * @param id
     * @return
     */
    int logicDeleteSignIn(@Param("id") String id);

    /**
     * 中奖奖记录列表
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listSignInPrize(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 邀请的人列表
     * @param userId
     * @return
     */
    List<Map<String, Object>> listMyInvitePeople(@Param("userId") String userId);

    /**
     * 获取最新10条分享得到的奖品
     * @return
     */
    List<Map<String, Object>> listSharePrizeLastTenData();

    /**
     * 插入中奖数据
     * @param reqMap
     * @return
     */
    int insertSignInPrize(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 查询分享数据
     * @param reqMap
     * @return
     */
    Map<String, Object> selectShare(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 查询已分享人数
     * @param userId
     * @param shareType
     * @return
     */
    int countSharePerson(@Param("userId") String userId, @Param("shareType") int shareType);

    /**
     * 查询被分享人是否在活动中分享过(同一被分享人只能助力一次)
     * @param reqMap
     * @return
     */
    Map<String, Object> existOtherUserForShareRecord(Map<String, Object> reqMap);

    /**
     * 保存分享数据
     * @param reqMap
     * @return
     */
    int insertShare(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 查询分享记录数据
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listShareRecord(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 保存分享记录数据
     * @param reqMap
     * @return
     */
    int insertShareRecord(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 保存分享记录数据
     * @param reqMap
     * @return
     */
    int updatePrizeRecipient(@Param("reqMap") Map<String, Object> reqMap);

    List<Map<String, Object>> listNoUpdatedBrowseWithShopInfo();

    void updateOrdersRandomWithShopInfo(@Param("id") String id, @Param("timeFlag") int timeFlag);

    void updateBrowseRandomWithShopInfo(@Param("id") String id, @Param("timeFlag") int timeFlag);

    void updateTelConsultRandomWithShopInfo(@Param("id") String id);

    List<Map<String, Object>> listNoUpdatedBrowseWithJoberInfo();

    void updateBrowseRandomWithJoberInfo(@Param("id") String id, @Param("timeFlag") int timeFlag);

    void updateTelConsultRandomWithJoberInfo(@Param("id") String id);

    List<Map<String, Object>> listNoUpdatedBrowseWithRecruitInfo();

    void updateBrowseRandomWithRecruitInfo(@Param("id") String id, @Param("timeFlag") int timeFlag);

    void updateTelConsultRandomWithRecruitInfo(@Param("id") String id);

    List<Map<String, Object>> listNoUpdatedBrowseWithBuyInfo();

    void updateBrowseRandomWithBuyInfo(@Param("id") String id, @Param("timeFlag") int timeFlag);

    void updateTelConsultRandomWithBuyInfo(@Param("id") String id);

    /**
     * 修改电话咨询
     * @param reqMap
     * @return
     */
    int updateTelConsult(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取租售没有坐标的列表
     * @return
     */
    List<Map<String, String>> listNoLongitude();

    int saveLatitudeAndLongitudeForBuyInfo(Map<String, String> paramsMap);

    /**
     * 获取维修店铺没有坐标的列表
     * @return
     */
    List<Map<String, String>> listNoLongitudeWithShopInfo();

    int saveLatitudeAndLongitudeForShopInfo(Map<String, String> paramsMap);

    /**
     * 获取维修店铺没有评价的列表
     * @return
     */
    List<Map<String, String>> listNoEvaluationsWithShopInfo();

    /**
     * 获取求职没有职位类型的列表
     * @return
     */
    List<Map<String, String>> listNoWorkTypeWithJoberInfo();

    /** 出租租赁方式随机处理 */
    List<Map<String, String>> listRentalMethodForBuyInfo();

    int saveEvaluationsForShopInfo(Map<String, String> paramsMap);


    int saveWorkTypeForJoberInfo(Map<String, String> paramsMap);

    int saveRentalMethodForBuyInfo(Map<String, String> paramsMap);

    List<Map<String, String>> listNoWorkTypeWithRecruitInfo();

    int saveWorkTypeForRecruitInfo(Map<String, String> paramsMap);

    /**
     * 获取品牌列表
     * @return
     */
    List<Map<String, Object>> listBrand(Map<String, Object> reqMap);

    /**
     * 插入举报信息
     * @param reportViolations
     * @return
     */
    int insertReportViolations(ReportViolations reportViolations);

    /**
     * 插入举报信息
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getMyCollectionType(Map<String, Object> reqMap);


    /**
     * 修改企业招聘
     * @param reqMap
     * @return
     */
    int updateRecruitInfo(Map<String, Object> reqMap);

    /**
     * 修改求职信息
     * @param reqMap
     * @return
     */
    int updateJoberInfo(Map<String, Object> reqMap);

    /**
     * 修改店铺信息
     * @param reqMap
     * @return
     */
    int updateShop(Map<String, Object> reqMap);

    /**
     * 修改租售信息
     * @param reqMap
     * @return
     */
    int updatePublicCarDetail(Map<String, Object> reqMap);

    /**
     * 更改促销状态
     * @param reqMap
     * @return
     */
    int updateBuyinfoPromotion(Map<String, Object> reqMap);

    Map<String, Object> getBrandAndModelByBuyInfoId(@Param("buyinfoId") String buyinfoId);

    int addBrandAndModel(Map<String, Object> map);

    int updateBrandAndModelByBuyinfoId(Map<String, Object> map);

    List<Map<String,Object>> selectBrand(Map<String,Object> map);
    //获取求租人信息
    List<Map<String,Object>> selectSeekingRent(Map<String,Object> map);
    //获取求购人信息
    List<Map<String,Object>> selectWantBuy(Map<String,Object> map);
    //获取出售人信息
    List<Map<String,Object>> selectSell(Map<String,Object> map);
    //获取出租人信息
    List<Map<String,Object>> selectHire(Map<String,Object> map);
    //查找s_id
    List<Map<String,Object>> selectId(Map<String,Object> map);
    //查找出售
    List<Map<String,Object>> selectSellAndBuy(Map<String,Object> map);
    //查找求购
    List<Map<String,Object>> selectSellBuy(Map<String,Object> map);
    List<Map<String,Object>> selectSellA(Map<String,Object> map);
    List<Map<String,Object>> selectHireA(Map<String,Object> map);
    List<Map<String, Object>> getCarType(Map<String, Object> map);

    // 更新点击次数
    int updateCarTypeClickCount(Map<String, Object> reqMap);

    // 返回所有品牌下面的车
    List<Map<String, Object>> getVehicleModel(Map<String, Object> reqMap);

    // 返回所有品牌下面的车
    List<Map<String, Object>> getAllVehicleModel(Map<String, Object> reqMap);

    // 记录用户搜索的车辆
    int recordVehicleModel(Map<String, Object> reqMap);

    // 查询点击次数
    Map<String,Object> selectClickCount(Map<String, Object> reqMap);

    // 更新点击次数
    int updateClickCount(Map<String, Object> reqMap);

    // 获取用户车型对比的历史车辆
    List<Map<String, Object>> getClickCarHistory(Map<String, Object> reqMap);

    // 获取
    List<Map<String, Object>> getZhaobiaoProject(Map<String, Object> reqMap);



    /**
     * 搜索审核状态的count
     * @param reqMap
     * @param tableName
     * @param type
     * @return
     */
    Integer getMyReleaseSearchCount(@Param("reqMap") Map<String, Object> reqMap, @Param("tableName") String tableName, @Param("type") String type);

    /**
     * 判断该用户是否是商家
     * @param id
     * @return
     */
    int getIsCompany(String id);

    /**
     * 游客是否设置过轮播图
     * @param sId
     * @return
     */
    int isSetBanner(@Param("sId") String sId,@Param("type")int type);

    /**
     *获取首页五张轮播图
     * @param sId
     * @return
     */
    List<String> getBannerList(@Param("sId") String sId,@Param("type")int type);

    /**
     *获取首页五张轮播图
     * @param sId
     * @return
     */
    List<Map<String, Object>> getBannerListNew(@Param("sId") String sId,@Param("type")int type);

    /**
     * 获取热门品牌，数据库最多的品牌
     * @return
     */
    List<Map<String, Object>> getHotMechanicsBrand();

    /**
     * 获取热门机型，数据库最多的机型
     * @return
     */
    List<Map<String, Object>> getHotMechanicsModel();

    /**
     * 获取暂未审核的维修店铺数据
     * @return
     */
    List<Map<String, Object>> getNoShopExamine(Map<String, Object> map);
    /**
     * 获取暂未审核的求职数据
     * @return
     */
    List<Map<String, Object>> getNoJoberExamine(Map<String, Object> map);
    /**
     * 获取暂未审核的招聘数据
     * @return
     */
    List<Map<String, Object>> getNoRecruitExamine(Map<String, Object> map);
    /**
     * 获取暂未审核的出租出售求租求购数据
     * @return
     */
    List<Map<String, Object>> getNoCarDetailExamine(Map<String, Object> map);


    List<Map<String, Object>> getBuyInfoFile();

    int updateBuyInfoFilePath(@Param("image") String image, @Param("thumFileName") String thumFileName,
                              @Param("detail_picture") String detailPicture,@Param("imagefirst") String imageFirst, @Param("id") String id);

    /**
     * 获取使用的机型列表
     * @return
     */
    List<Map<String, Object>> getModelList();

    /**
     * 记录用户的登录和退出
     * @param reqMap
     * @return
     */
    int insertLoginRecord(Map<String,Object> reqMap);

    /**
     * 记录用户行为 添加分数
     * @param reqMap
     * @return
     */
    int insertUserBehavior(Map<String,Object> reqMap);

    /**
     * 用户或者设备是否存在
     * @param reqMap
     * @return
     */
    int isExist(Map<String, Object> reqMap);

    /**
     * 获取用户行为表里的当前分数
     * @param reqMap
     * @return
     */
    Integer getCurrentScore(Map<String, Object> reqMap);

    /**
     * 修改用户行为表里的分数
     * @param reqMap
     */
    int updateUserBehavior(Map<String, Object> reqMap);

    /**
     * 该设备以前是否登陆过
     * @param reqMap
     * @return
     */
    int isLoginDevice(Map<String, Object> reqMap);

    /**
     * 该用户之前是否登录过其他设备
     * @param reqMap
     * @return
     */
    int isLoginOthers(Map<String, Object> reqMap);

    /**
     * 查询最近该用户登陆的执行了此类型的设备
     * @param reqMap
     * @return
     */
    String getLatestDevice(Map<String, Object> reqMap);

    /**
     * 查询表里是否有该设备号和userid的数据
     * @param reqMap
     * @return
     */
    int getNoUserDevice(Map<String, Object> reqMap);

    /**
     * 绑定userid
     * @param reqMap
     * @return
     */
    int updateNoUserDevice(Map<String, Object> reqMap);

    /**
     * //根据此设备号查出最近一次登录设备的所有行为
     * @param device
     * @return
     */
    List<Map<String, Object>> getLatestDeviceBehavior(@Param("device") String device,@Param("userId") String userId);

    /**
     * 将该设备的其他type也绑定此userid
     * @param reqMap
     */
    void updateOthersDevice(Map<String, Object> reqMap);

    /** 今日最新一条新闻 */
    Map<String, Object> lastNewsToday();

    /**
     * 用户行为得分高的数据
     */
    List<Map<String, Object>> userBehaviorCoreHigh();
    List<Map<String, Object>> deviceBehaviorCoreHigh();

    /**
     * 将之前用户没有设备号的该类型数据绑定到此设备上,并加分
     * @param reqMap
     * @return
     */
    int updateNoDevice(Map<String, Object> reqMap);

    /**
     * 绑定之前该用户没有绑定设备的各种类型的行为
     * @param reqMap
     */
    void updateOthersNoDevice(Map<String, Object> reqMap);

    /**
     * 查询是否有绑定了此设备 但是没有绑定user_id的数据
     * @param reqMap
     * @return
     */
    int getIsBindDeviceNoUser(Map<String, Object> reqMap);

    /**
     * 获取所有的绑定该设备号但是没有绑定 user_id的数据
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getDataBindDeviceNoUser(Map<String, Object> reqMap);

    /**
     * 修改设备号和分数
     * @param reqMap
     */
    void updateDeviceScore(Map<String, Object> reqMap);

    /**
     * 删除该设备的没有绑定用户的数据
     * @param reqMap
     * @return
     */
    int deleteNoUserData(Map<String, Object> reqMap);

    /**
     * 获取新机我的发布
     * @param reqMap
     */
    List<Map<String,Object>> getNewMachineRelease(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 获取新机发布的条数
     * @param reqMap
     * @return
     */
    int getNewMachineCount(@Param("reqMap") Map<String, Object> reqMap);

    /**
     * 该数据是否是新机
     * @param id
     * @return
     */
    int isNewMachine(String id);

    /**
     * 保存第三方API返回的手机的ISP信息数据到本地数据库
     * @param reqMap
     * @return
     */
    int insertMobileISP(Map<String,Object> reqMap);

    /**
     * 根据Mobile手机号码查询本地库是否存在手机相关ISP信息
     * @param mobile
     * @return
     */
    Map<String, Object> getISPDataWithLocal(String mobile);

    /**
     * 更新该手机号码是否已经给其发送过流量的标识
     * @param reqMap
     * @return
     */
    int updateISPDataForSendedFlag(Map<String, Object> reqMap);

    /**
     * 更新分享的用户的删除标识为1(逻辑删除),不再计算逻辑删除的用户分享，使其可以重新计算分享的用户数
     * @param reqMap
     * @return
     */
    int updateShareRecordForDeleteFlag(Map<String, Object> reqMap);
}